<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.10.0" />
<title>Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/ir-black.min.css" crossorigin>
<style>
:root {
--highlight-color: #202;
}
html {
scrollbar-face-color: #646464;
scrollbar-base-color: #646464;
scrollbar-3dlight-color: #646464;
scrollbar-highlight-color: #646464;
scrollbar-track-color: #000;
scrollbar-arrow-color: #000;
scrollbar-shadow-color: #646464;
scrollbar-dark-shadow-color: #646464;
}
::-webkit-scrollbar { width: 14px; height: 3px;}
::-webkit-scrollbar-button {
background-color: #000;
height: 3px;}
::-webkit-scrollbar-track {
background-color: #646464;}
::-webkit-scrollbar-track-piece { background-color: #000;}
::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 7px;}
::-webkit-scrollbar-corner { background-color: #646464;}
::-webkit-resizer { background-color: #666;}
.flex {
display: flex !important;
}
body {
line-height: 1.5em;
color: #fff;
background-color: #1e1e1e;
font: 14px/1.5 Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
}
#content {
padding: 20px;
}
#sidebar {
padding: 30px;
overflow: hidden;
}
#sidebar>*:last-child {
margin-bottom: 2cm;
}
.http-server-breadcrumbs {
font-size: 130%;
margin: 0 0 15px 0;
}
#footer {
font-size: .75em;
padding: 5px 30px;
border-top: 1px solid #fff;
text-align: right;
}
#footer p {
margin: 0 0 0 1em;
display: inline-block;
}
#footer p:last-child {
margin-right: 30px;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: 300;
color: #fff;
}
h1 {
font-size: 2.5em;
line-height: 1.1em;
}
h2 {
font-size: 1.75em;
margin: 1em 0 .50em 0;
}
h3 {
font-size: 1.4em;
margin: 25px 0 10px 0;
}
h4 {
margin: 0;
font-size: 105%;
}
h1:target,
h2:target,
h3:target,
h4:target,
h5:target,
h6:target {
background: #1e1e1e;
padding: 0.2em 0;
}
a {
color: #8fd6fc;
text-decoration: none;
transition: color .3s ease-in-out;
}
a:hover {
color: #00a4fc;
}
.title code {
font-weight: bold;
}
h2[id^="header-"] {
margin-top: 2em;
}
.ident {
color: #f6fc85;
}
strong {
color: #8fd6fc;
}
pre code {
background: transparent;
font-size: .8em;
line-height: 1.4em;
}
code {
background: rgba(255, 255, 255, 0.1);
padding: 1px 4px;
overflow-wrap: break-word;
}
h1 code {
background: transparent
}
pre {
background: transparent;
border: 0;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
margin: 1em 0;
padding: 1ex;
}
#http-server-module-list {
display: flex;
flex-flow: column;
}
#http-server-module-list div {
display: flex;
}
#http-server-module-list dt {
min-width: 10%;
}
#http-server-module-list p {
margin-top: 0;
}
.toc ul,
#index {
list-style-type: none;
margin: 0;
padding: 0;
}
#index code {
background: transparent;
}
#index h3 {
border-bottom: 1px solid #ddd;
}
#index ul {
padding: 0;
}
#index h4 {
margin-top: .6em;
font-weight: bold;
}
/* Make TOC lists have 2+ columns when viewport is wide enough.
Assuming ~20-character identifiers and ~30% wide sidebar. */
@media (min-width: 200ex) {
#index .two-column {
column-count: 2
}
}
@media (min-width: 300ex) {
#index .two-column {
column-count: 3
}
}
dl {
margin-bottom: 2em;
}
dl dl:last-child {
margin-bottom: 4em;
}
dd {
margin: 0 0 1em 3em;
}
#header-classes+dl>dd {
margin-bottom: 3em;
}
dd dd {
margin-left: 2em;
}
dd p {
margin: 10px 0;
}
.name {
background: #000;
font-weight: bold;
font-size: .85em;
padding: 5px 10px;
display: inline-block;
min-width: 40%;
}
.name:hover {
background: #0b0b0b;
}
dt:target .name {
background: var(--highlight-color);
}
.name>span:first-child {
white-space: nowrap;
}
.name.class>span:nth-child(2) {
margin-left: .4em;
}
.inherited {
color: #999;
border-left: 5px solid #eee;
padding-left: 1em;
}
.inheritance em {
font-style: normal;
font-weight: bold;
}
.pydefname {
color: #f90;
}
/* Docstrings titles, e.g. in numpydoc format */
.desc h2 {
font-weight: 400;
font-size: 1.25em;
}
.desc h3 {
font-size: 1em;
}
.desc dt code {
background: inherit;
/* Don't grey-back parameters */
}
.source summary,
.git-link-div {
color: #666;
text-align: right;
font-weight: 400;
font-size: .8em;
text-transform: uppercase;
}
.source summary>* {
white-space: nowrap;
cursor: pointer;
}
.git-link {
color: inherit;
margin-left: 1em;
}
.source pre {
max-height: 500px;
overflow: auto;
margin: 0;
}
.source pre code {
font-size: 12px;
overflow: visible;
}
.hlist {
list-style: none;
}
.hlist li {
display: inline;
}
.hlist li:after {
content: ',\2002';
}
.hlist li:last-child:after {
content: none;
}
.hlist .hlist {
display: inline;
padding-left: 1em;
}
img {
max-width: 100%;
}
td {
padding: 0 .5em;
}
.admonition {
padding: .1em .5em;
margin-bottom: 1em;
}
.admonition-title {
font-weight: bold;
}
.admonition.note,
.admonition.info,
.admonition.important {
background: #00a;
}
.admonition.todo,
.admonition.versionadded,
.admonition.tip,
.admonition.hint {
background: #050;
}
.admonition.warning,
.admonition.versionchanged,
.admonition.deprecated {
background: #ec0;
}
.admonition.error,
.admonition.danger,
.admonition.caution {
background: #c20010;
}
p {
color: #fff;
}
</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">from plugins.plugin import PluginInformation
from src.logger import print

PluginInfo = PluginInformation(
    name=&#34;PanelManager&#34;,
    description=&#34;Allows you to open different panels.&#34;,
    version=&#34;0.1&#34;,
    author=&#34;Tumppi066&#34;,
    url=&#34;https://github.com/Tumppi066/Euro-Truck-Simulator-2-Lane-Assist&#34;,
    type=&#34;static&#34;
)


from src.loading import LoadingWindow
import tkinter as tk
from tkinter import ttk
import src.helpers as helpers
from src.mainUI import quit, switchSelectedPlugin
import src.variables as variables
import src.settings as settings
import os
from PIL import Image, ImageTk


class UI():
    try:
        def findPlugins(self):
            # Find plugins
            print(&#34;Importing plugins...&#34;)
            #loading = LoadingWindow(&#34;Importing plugins...&#34;)
            path = os.path.join(variables.PATH, &#34;plugins&#34;)
            plugins = []
            for file in os.listdir(path):
                if os.path.isdir(os.path.join(path, file)):
                    # Check for main.py
                    if &#34;main.py&#34; in os.listdir(os.path.join(path, file)):
                        # Check for PluginInformation class
                        try:
                            pluginPath = &#34;plugins.&#34; + file + &#34;.main&#34;
                            plugin = __import__(pluginPath, fromlist=[&#34;PluginInformation&#34;])
                            if plugin.PluginInfo.type == &#34;static&#34;:
                                plugins.append(plugin.PluginInfo)
                                print(&#34;Found panel: &#34; + pluginPath)
                        except Exception as ex:
                            print(ex.args)
                            pass
                        
            #loading.destroy()
            
            return plugins
        

        
        def __init__(self, master) -&gt; None:
            self.done = False
            self.master = master
            self.page0()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        
        def page0(self):
            
            try:
                self.root.destroy()
            except: pass
            
            self.root = tk.Canvas(self.master, width=800, height=700, border=0, highlightthickness=0)
            self.root.grid_propagate(0)
            
            self.plugins = self.findPlugins()
            
            self.listVariable = tk.StringVar()
            self.listVariable.set([helpers.ConvertCapitalizationToSpaces(p.name) for p in self.plugins])
            
            self.pluginList = tk.Listbox(self.root, width=23, height=25, listvariable=self.listVariable, font=(&#34;Roboto&#34;, 12), selectmode=&#34;single&#34;, activestyle=&#34;none&#34;)
            self.pluginList.grid(row=1, column=0, padx=0, pady=2)
            
            # Double click to open
            self.pluginList.bind(&#39;&lt;Double-Button&gt;&#39;, lambda x: switchSelectedPlugin(&#34;plugins.&#34; + (self.plugins[self.pluginList.curselection()[0]].name) + &#34;.main&#34;))
            # Arrow keys to change selection up and down
            def select(event):
                # If up arrow
                curSelection = self.pluginList.curselection()[0]
                if event.keysym == &#34;Up&#34;:
                    # If not at the top
                    if curSelection != 0:
                        # Select the one above
                        self.pluginList.select_clear(curSelection)
                        self.pluginList.select_set(curSelection-1)
                        self.pluginList.activate(curSelection)
                        self.pluginList.see(curSelection)
                # If down arrow
                elif event.keysym == &#34;Down&#34;:
                    # If not at the bottom
                    if curSelection != len(self.plugins)-1:
                        # Select the one below
                        self.pluginList.select_clear(curSelection)
                        self.pluginList.select_set(curSelection+1)
                        self.pluginList.activate(curSelection)
                        self.pluginList.see(curSelection)
                
            self.pluginList.bind(&#39;&lt;Up&gt;&#39;, select)
            self.pluginList.bind(&#39;&lt;Down&gt;&#39;, select)
            
            helpers.MakeLabel(self.root, &#34;Select a panel to load:\n(the list is scrollable)&#34;, 0,0, font=(&#34;Roboto&#34;, 8), padx=5, pady=10, columnspan=1)
            
            # Select the first plugin
            self.pluginList.select_set(0)
            self.pluginList.activate(0)
            self.pluginList.see(0)
            
            self.root.pack(anchor=&#34;center&#34;, expand=False)
            
            self.root.update()
        
        
        def selectedPlugin(self, plugin):
            try:
                self.pluginInfoFrame.destroy()
            except:
                pass
            
            self.plugin = plugin
            
            self.pluginInfoFrame = ttk.LabelFrame(self.root, text=plugin.name, width=430, height=530)
            self.pluginInfoFrame.pack_propagate(0)
            self.pluginInfoFrame.grid_propagate(0)
            self.pluginInfoFrame.grid(row=0, column=1, padx=10, pady=2, rowspan=3)
            
            if plugin.image != None:
                # Load the logo
                self.logo = Image.open(os.path.join(variables.PATH, &#34;plugins&#34;, plugin.name, plugin.image))
                # Resize to height keeping the aspect ratio
                height = 130
                self.logo = self.logo.resize((int(height*self.logo.width/self.logo.height), height), Image.ANTIALIAS)
                self.logo = ImageTk.PhotoImage(self.logo)
                self.logoLabel = tk.Label(self.pluginInfoFrame, image=self.logo)
                self.logoLabel.grid(row=0, column=0, columnspan=1, pady=10, padx=30)
                
                helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,1, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=1, sticky=&#34;w&#34;, translate=False)
                
            else:
                helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,0, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;, translate=False)
                
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Description&#34;, 1,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.description, 2,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Version&#34;, 3,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.version, 4,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Author&#34;, 5,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.author, 6,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;URL&#34;, 7,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.url, 8,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)

            helpers.MakeButton(self.pluginInfoFrame, &#34;Load plugin&#34;, lambda: switchSelectedPlugin(&#34;plugins.&#34; + plugin.name + &#34;.main&#34;), 9, 0, width=15, padx=8)        

        
        def update(self, data):
            
            try:
                if self.plugins[self.pluginList.curselection()[0]].name != self.plugin.name:
                    self.selectedPlugin(self.plugins[self.pluginList.curselection()[0]])
            except:
                try:
                    self.plugin
                except:
                    self.selectedPlugin(self.plugins[0])
                    
            self.root.update()
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI"><code class="flex name class">
<span>class <span class="ident">UI</span></span>
<span>(</span><span>master)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class UI():
    try:
        def findPlugins(self):
            # Find plugins
            print(&#34;Importing plugins...&#34;)
            #loading = LoadingWindow(&#34;Importing plugins...&#34;)
            path = os.path.join(variables.PATH, &#34;plugins&#34;)
            plugins = []
            for file in os.listdir(path):
                if os.path.isdir(os.path.join(path, file)):
                    # Check for main.py
                    if &#34;main.py&#34; in os.listdir(os.path.join(path, file)):
                        # Check for PluginInformation class
                        try:
                            pluginPath = &#34;plugins.&#34; + file + &#34;.main&#34;
                            plugin = __import__(pluginPath, fromlist=[&#34;PluginInformation&#34;])
                            if plugin.PluginInfo.type == &#34;static&#34;:
                                plugins.append(plugin.PluginInfo)
                                print(&#34;Found panel: &#34; + pluginPath)
                        except Exception as ex:
                            print(ex.args)
                            pass
                        
            #loading.destroy()
            
            return plugins
        

        
        def __init__(self, master) -&gt; None:
            self.done = False
            self.master = master
            self.page0()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        
        def page0(self):
            
            try:
                self.root.destroy()
            except: pass
            
            self.root = tk.Canvas(self.master, width=800, height=700, border=0, highlightthickness=0)
            self.root.grid_propagate(0)
            
            self.plugins = self.findPlugins()
            
            self.listVariable = tk.StringVar()
            self.listVariable.set([helpers.ConvertCapitalizationToSpaces(p.name) for p in self.plugins])
            
            self.pluginList = tk.Listbox(self.root, width=23, height=25, listvariable=self.listVariable, font=(&#34;Roboto&#34;, 12), selectmode=&#34;single&#34;, activestyle=&#34;none&#34;)
            self.pluginList.grid(row=1, column=0, padx=0, pady=2)
            
            # Double click to open
            self.pluginList.bind(&#39;&lt;Double-Button&gt;&#39;, lambda x: switchSelectedPlugin(&#34;plugins.&#34; + (self.plugins[self.pluginList.curselection()[0]].name) + &#34;.main&#34;))
            # Arrow keys to change selection up and down
            def select(event):
                # If up arrow
                curSelection = self.pluginList.curselection()[0]
                if event.keysym == &#34;Up&#34;:
                    # If not at the top
                    if curSelection != 0:
                        # Select the one above
                        self.pluginList.select_clear(curSelection)
                        self.pluginList.select_set(curSelection-1)
                        self.pluginList.activate(curSelection)
                        self.pluginList.see(curSelection)
                # If down arrow
                elif event.keysym == &#34;Down&#34;:
                    # If not at the bottom
                    if curSelection != len(self.plugins)-1:
                        # Select the one below
                        self.pluginList.select_clear(curSelection)
                        self.pluginList.select_set(curSelection+1)
                        self.pluginList.activate(curSelection)
                        self.pluginList.see(curSelection)
                
            self.pluginList.bind(&#39;&lt;Up&gt;&#39;, select)
            self.pluginList.bind(&#39;&lt;Down&gt;&#39;, select)
            
            helpers.MakeLabel(self.root, &#34;Select a panel to load:\n(the list is scrollable)&#34;, 0,0, font=(&#34;Roboto&#34;, 8), padx=5, pady=10, columnspan=1)
            
            # Select the first plugin
            self.pluginList.select_set(0)
            self.pluginList.activate(0)
            self.pluginList.see(0)
            
            self.root.pack(anchor=&#34;center&#34;, expand=False)
            
            self.root.update()
        
        
        def selectedPlugin(self, plugin):
            try:
                self.pluginInfoFrame.destroy()
            except:
                pass
            
            self.plugin = plugin
            
            self.pluginInfoFrame = ttk.LabelFrame(self.root, text=plugin.name, width=430, height=530)
            self.pluginInfoFrame.pack_propagate(0)
            self.pluginInfoFrame.grid_propagate(0)
            self.pluginInfoFrame.grid(row=0, column=1, padx=10, pady=2, rowspan=3)
            
            if plugin.image != None:
                # Load the logo
                self.logo = Image.open(os.path.join(variables.PATH, &#34;plugins&#34;, plugin.name, plugin.image))
                # Resize to height keeping the aspect ratio
                height = 130
                self.logo = self.logo.resize((int(height*self.logo.width/self.logo.height), height), Image.ANTIALIAS)
                self.logo = ImageTk.PhotoImage(self.logo)
                self.logoLabel = tk.Label(self.pluginInfoFrame, image=self.logo)
                self.logoLabel.grid(row=0, column=0, columnspan=1, pady=10, padx=30)
                
                helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,1, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=1, sticky=&#34;w&#34;, translate=False)
                
            else:
                helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,0, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;, translate=False)
                
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Description&#34;, 1,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.description, 2,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Version&#34;, 3,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.version, 4,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;Author&#34;, 5,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.author, 6,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, &#34;URL&#34;, 7,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
            helpers.MakeLabel(self.pluginInfoFrame, plugin.url, 8,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)

            helpers.MakeButton(self.pluginInfoFrame, &#34;Load plugin&#34;, lambda: switchSelectedPlugin(&#34;plugins.&#34; + plugin.name + &#34;.main&#34;), 9, 0, width=15, padx=8)        

        
        def update(self, data):
            
            try:
                if self.plugins[self.pluginList.curselection()[0]].name != self.plugin.name:
                    self.selectedPlugin(self.plugins[self.pluginList.curselection()[0]])
            except:
                try:
                    self.plugin
                except:
                    self.selectedPlugin(self.plugins[0])
                    
            self.root.update()
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.destroy"><code class="name flex">
<span>def <span class="ident">destroy</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def destroy(self):
    self.done = True
    self.root.destroy()
    del self</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.findPlugins"><code class="name flex">
<span>def <span class="ident">findPlugins</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def findPlugins(self):
    # Find plugins
    print(&#34;Importing plugins...&#34;)
    #loading = LoadingWindow(&#34;Importing plugins...&#34;)
    path = os.path.join(variables.PATH, &#34;plugins&#34;)
    plugins = []
    for file in os.listdir(path):
        if os.path.isdir(os.path.join(path, file)):
            # Check for main.py
            if &#34;main.py&#34; in os.listdir(os.path.join(path, file)):
                # Check for PluginInformation class
                try:
                    pluginPath = &#34;plugins.&#34; + file + &#34;.main&#34;
                    plugin = __import__(pluginPath, fromlist=[&#34;PluginInformation&#34;])
                    if plugin.PluginInfo.type == &#34;static&#34;:
                        plugins.append(plugin.PluginInfo)
                        print(&#34;Found panel: &#34; + pluginPath)
                except Exception as ex:
                    print(ex.args)
                    pass
                
    #loading.destroy()
    
    return plugins</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.page0"><code class="name flex">
<span>def <span class="ident">page0</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def page0(self):
    
    try:
        self.root.destroy()
    except: pass
    
    self.root = tk.Canvas(self.master, width=800, height=700, border=0, highlightthickness=0)
    self.root.grid_propagate(0)
    
    self.plugins = self.findPlugins()
    
    self.listVariable = tk.StringVar()
    self.listVariable.set([helpers.ConvertCapitalizationToSpaces(p.name) for p in self.plugins])
    
    self.pluginList = tk.Listbox(self.root, width=23, height=25, listvariable=self.listVariable, font=(&#34;Roboto&#34;, 12), selectmode=&#34;single&#34;, activestyle=&#34;none&#34;)
    self.pluginList.grid(row=1, column=0, padx=0, pady=2)
    
    # Double click to open
    self.pluginList.bind(&#39;&lt;Double-Button&gt;&#39;, lambda x: switchSelectedPlugin(&#34;plugins.&#34; + (self.plugins[self.pluginList.curselection()[0]].name) + &#34;.main&#34;))
    # Arrow keys to change selection up and down
    def select(event):
        # If up arrow
        curSelection = self.pluginList.curselection()[0]
        if event.keysym == &#34;Up&#34;:
            # If not at the top
            if curSelection != 0:
                # Select the one above
                self.pluginList.select_clear(curSelection)
                self.pluginList.select_set(curSelection-1)
                self.pluginList.activate(curSelection)
                self.pluginList.see(curSelection)
        # If down arrow
        elif event.keysym == &#34;Down&#34;:
            # If not at the bottom
            if curSelection != len(self.plugins)-1:
                # Select the one below
                self.pluginList.select_clear(curSelection)
                self.pluginList.select_set(curSelection+1)
                self.pluginList.activate(curSelection)
                self.pluginList.see(curSelection)
        
    self.pluginList.bind(&#39;&lt;Up&gt;&#39;, select)
    self.pluginList.bind(&#39;&lt;Down&gt;&#39;, select)
    
    helpers.MakeLabel(self.root, &#34;Select a panel to load:\n(the list is scrollable)&#34;, 0,0, font=(&#34;Roboto&#34;, 8), padx=5, pady=10, columnspan=1)
    
    # Select the first plugin
    self.pluginList.select_set(0)
    self.pluginList.activate(0)
    self.pluginList.see(0)
    
    self.root.pack(anchor=&#34;center&#34;, expand=False)
    
    self.root.update()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.selectedPlugin"><code class="name flex">
<span>def <span class="ident">selectedPlugin</span></span>(<span>self, plugin)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def selectedPlugin(self, plugin):
    try:
        self.pluginInfoFrame.destroy()
    except:
        pass
    
    self.plugin = plugin
    
    self.pluginInfoFrame = ttk.LabelFrame(self.root, text=plugin.name, width=430, height=530)
    self.pluginInfoFrame.pack_propagate(0)
    self.pluginInfoFrame.grid_propagate(0)
    self.pluginInfoFrame.grid(row=0, column=1, padx=10, pady=2, rowspan=3)
    
    if plugin.image != None:
        # Load the logo
        self.logo = Image.open(os.path.join(variables.PATH, &#34;plugins&#34;, plugin.name, plugin.image))
        # Resize to height keeping the aspect ratio
        height = 130
        self.logo = self.logo.resize((int(height*self.logo.width/self.logo.height), height), Image.ANTIALIAS)
        self.logo = ImageTk.PhotoImage(self.logo)
        self.logoLabel = tk.Label(self.pluginInfoFrame, image=self.logo)
        self.logoLabel.grid(row=0, column=0, columnspan=1, pady=10, padx=30)
        
        helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,1, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=1, sticky=&#34;w&#34;, translate=False)
        
    else:
        helpers.MakeLabel(self.pluginInfoFrame, plugin.name, 0,0, font=(&#34;Roboto&#34;, 16, &#34;bold&#34;), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;, translate=False)
        
    helpers.MakeLabel(self.pluginInfoFrame, &#34;Description&#34;, 1,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, plugin.description, 2,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, &#34;Version&#34;, 3,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, plugin.version, 4,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, &#34;Author&#34;, 5,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, plugin.author, 6,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, &#34;URL&#34;, 7,0, font=(&#34;Roboto&#34;, 12), padx=10, pady=10, columnspan=2, sticky=&#34;w&#34;)
    helpers.MakeLabel(self.pluginInfoFrame, plugin.url, 8,0, font=(&#34;Roboto&#34;, 8), padx=10, pady=2, columnspan=2, sticky=&#34;w&#34;)

    helpers.MakeButton(self.pluginInfoFrame, &#34;Load plugin&#34;, lambda: switchSelectedPlugin(&#34;plugins.&#34; + plugin.name + &#34;.main&#34;), 9, 0, width=15, padx=8)        </code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.update"><code class="name flex">
<span>def <span class="ident">update</span></span>(<span>self, data)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def update(self, data):
    
    try:
        if self.plugins[self.pluginList.curselection()[0]].name != self.plugin.name:
            self.selectedPlugin(self.plugins[self.pluginList.curselection()[0]])
    except:
        try:
            self.plugin
        except:
            self.selectedPlugin(self.plugins[0])
            
    self.root.update()</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager" href="index.html">Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI">UI</a></code></h4>
<ul class="">
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.destroy" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.destroy">destroy</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.findPlugins" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.findPlugins">findPlugins</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.page0" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.page0">page0</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.selectedPlugin" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.selectedPlugin">selectedPlugin</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.update" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.PanelManager.main.UI.update">update</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.10.0</a>.</p>
</footer>
</body>
</html>